上章我們已經安裝好了Dlib
函式庫,我們在程式碼的開頭也要記得匯入。
import dlib
import cv2
import imutils
本章我們要做的功能是利用電腦本身的攝像頭,配合dlib
的人臉捕捉函式,做到只留臉部的攝影程式。
所以我們要先設置好攝像頭:
cap = cv2.VideoCapture(0)
接著引入Dlib
的人臉偵測器:
detector = dlib.get_frontal_face_detector()
就可以開始編寫程式主體了!
ret, frame = cap.read()
face_rects = detector.run(frame, 0)
上面的動作為:使用cap.read
用攝像頭讀取一張圖片,然後將圖片丟入人臉偵測器中進行辨識,辨識出來的結果存入face_rects
變數,方便下面的步驟使用。
for i, d in enumerate(face_rects):
x1 = d.left()
y1 = d.top()
x2 = d.right()
y2 = d.bottom()
上面的迴圈是用來刻出人臉所在的具體位置和上下左右的座標。enumerate
為Python
函式,可用於將一個可遍歷/可叠代的對象一一枚舉,這裡就不多做介紹。
result = frame[y1:y2, x1:x2]
這裡我們將已經抓出來的上下左右座標對應到原始圖片,並且用圖片分割將除了臉部以外的其他部份去掉,只留下完整臉部的大頭照。
有了result
結果之後,下面的步驟就很簡單了:
cv2.imshow("FaceShow",result)
cap.release()
cv2.destroyAllWindows()
試著實際操作看看吧!
要記得在程式執行之前,先把眼鏡、口罩這些會影響臉部辨識的東西摘掉,不然人臉偵測器捕捉不到東西可是會在Terminal
報錯的!